1. Field of the Invention
The inventions disclosed herein relate generally to computing systems and more specifically to distributed computing systems, i.e., computing systems in which components of the system are connected by communications media.
2. Description of the Prior Art
Many of the entities available to a program executing on a computer system have names, i.e., identifiers which are not addresses but which may nevertheless be used by a program to locate the entity specified by the identifier. The computer system's operating system includes components which permit the user to name entities, which keep track of the relationships between names and entities, and which permit the user to locate the entity by means of its name.
Files are common examples of such named entities. The file system component of the operating system permits the user to give a file a character-string name and to locate the file using the character-string name. Other named entities may be devices such as terminals or printers. The set of names which a program may use to locate entities is termed the name space in which the program executes. The operating system determines how the name space is organized. In some cases, the name space is flat, that is, all names are on a single level. In other cases, the operating system organizes the names into hierarchies. A common form of hierarchical organization is the single tree. All of the names in the name space are organized into a tree with a single root. Names at interior nodes of the tree represent directories; names at leaf nodes represent ordinary entities. To locate an entity or directory in such a tree, a program specifies the name of the entity or directory and the names of all of the directories between the root of the tree and the entity or directory or the name of the entity or directory and the names of all of the directories between the process's current directory and the entity or directory. The combination of names necessary to locate the entity is termed the entity's path name.
In the past, name spaces have generally been per-system. Any program operating on a system could locate any named entity in the system. An example of such a per-system name space is that provided by a computer running the well-known UNIX.TM. operating system. All of the files provided by the UNIX operating system are organized into a single tree, and a program may locate any file in the system by specifying the file's path name in the tree. An advantage of this form of organization was that entities used by all programs, such as the executable code for the operating system or other utilities, could be made available to all programs by putting them in at predetermined places in the name space. Indeed, if two systems shared the same naming conventions for those predetermined places, a program which executed on one UNIX system would execute on another. For example, in UNIX systems, commonly-used utility programs are generally kept in the directory which is accessible by the path name/bin.
Originally, computer systems were independent entities. They could be connected by communications media, but the connected systems did not form a single system. As communications media have improved and the price of processors and memory have dropped, distributed computer systems have arisen. In these systems, a set of processors, display devices, and file storage devices which are connected by communications media form a single system. An advantage of a distributed system is that there is no logical limit to system size. While current distributed systems typically consist of a set of work stations which are connected via a local area network to each other and to a file server, i.e., a file storage device with a processor which is specialized to perform file operations, there is no reason why every work station, processor, file storage device, display device, and printer in a large corporation could not be part of a single distributed system.
One problem in the design of distributed systems is how to define the name space. One approach, exemplified in the Amoeba distributed system, is to simply ignore the problem. In the Amoeba system, described in Mullender, et al., Amoeba-A Distributed Operating System for the 1990's, IEEE Computer, May, 1990, the operating system does not define a name space. Instead, the system may include components called name servers. A name server defines a name space. When a process presents the name of an entity to the name server which defines the name space to which the name belongs, the name server returns the address of the entity in the distributed system and a capability which permits access to the entity. The process can then use the address and the capability to access the named entity. As may be seen from the foregoing, name space definition in the Amoeba system is left completely to the name servers.
Where operating systems have defined name spaces, several approaches have been taken. The approaches are explained in more detail in Comer, Droms, and Murtagh, An Experimental Implementation of the Tilde Naming System, Computing Systems, vol. 3, no. 4, University of California Press, Berkeley, Calif., 1991, pp. 487-515. One approach is to include all of the names in the distributed system in a single system-wide hierarchy of names. In some cases, the hierarchy of names includes the names of the system components upon which the entities represented by the names are located. One difficulty with this approach is the sheer size of the name space. A typical program uses only a few names, yet programs and users must deal with an enormous hierarchy. Further, where system component names are included in the hierarchy, a user or program must know which component has the entity he is looking for. Obviously, the magnitude of these difficulties increases as the size of the distributed system increases.
The problem of size has been dealt with by subdividing the name space. One way of subdividing the name space is by processor or work station. Each processor or work station has its own hierarchy of names which is a subset of the total name space of the system. A name in the processor's name space may represent an entity located anywhere in the distributed system, but what names are in the processor's name space and where the names are in the processor's name space will vary from processor to processor. A disadvantage of this approach is that a program which will execute in the name space defined for one processor will not necessarily execute in the name space defined for another processor. Consequently, a user of such a distributed system cannot easily move from one work station to another. Another way of subdividing the name space is by user. Each user of the system has its own hierarchy of names which is again a subset of the total name space of the system and which may include names for entities anywhere in the system. When the name space is subdivided by user, a program executed for a given user will execute in the same fashion regardless of which processor the program is executed on.
Neither the subdivision by user nor the subdivision by processor deals with the fact that the entities which execute programs in computer systems are processes, and not users or machines. In all respects but name space, the environment in which a program executes is the environment of the process which executes it. For example, when a program creates a temporary variable, that variable is part of the environment of the process which is executing the program and is accessible only by that process. However, when a program creates a temporary file, that file becomes part of the name space in which the process is executing, be it the system-wide name space, the name space for a processor, or the name space for a user.
In general, the fact that the same name used by two processes running in the same name space refers to the same entity causes serious naming problems. For example, if an entity, for example, a temporary file, is truly relevant only to a single process, then the process must create a name for the entity such that it is unique within the name space. The need to create such unique names and the complications flowing from their use are avoided if the two processes have different name spaces. The difficulties caused by the lack of per-process name spaces are not limited to distributed systems, but clearly become more severe as the size of the name space in which the process is running increases, and thus are larger in the larger name spaces provided by distributed systems.
It is an object of the invention disclosed herein to provide a solution to the problems described above, as well as to other problems of distributed systems.